﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace CamadaDados
{
    public class noticia
    {

        DB_CASAIS conexao = new DB_CASAIS();

        public void InicializarConexao(object banco)
        {
            ((DB_CASAIS)conexao).Connection.Open();
        }

        public void FecharConexao(object banco)
        {
            ((DB_CASAIS)conexao).Connection.Close();
        }
        
        public void GravarNoticia(tb_noticia objNoticia) {
            
            try
            {
                InicializarConexao(conexao);
                conexao.AddTotb_noticia(objNoticia);
                conexao.SaveChanges();

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(conexao);
            }
        }

        public IEnumerable<tb_noticia> ListarNoticiaDestaque()
        {

            try
            {
                InicializarConexao(conexao);
                var ListNoticia = conexao.tb_noticia.Where(q => q.CO_DESTAQUE == 1 && q.CO_SITUACAO == 1 && q.CO_TIPO_NOTICIA == 1 && q.DT_PUBLICACAO <= DateTime.Now).OrderByDescending(
                    q => q.DT_PUBLICACAO).OrderBy(q => q.CO_ORDEM_DESTAQUE).ToList().Take(6);
                return ListNoticia;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(conexao);
            }
            
        }

        public IEnumerable<tb_noticia> ListarBlogDestaque()
        {
            try
            {
                InicializarConexao(conexao);
                var ListBlog =
                conexao.tb_noticia.Where(q => q.CO_SITUACAO == 1 && q.CO_TIPO_NOTICIA == 2 && q.DT_PUBLICACAO <= DateTime.Now).OrderByDescending(
                    q => q.DT_PUBLICACAO).ToList().Take(6);
                return ListBlog;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(conexao);
            }
            
            
        }



        public List<tb_noticia> CarregarNoticias(int intCodTipoNoticia) {
            
            try
            {
                InicializarConexao(conexao);
                var ListObjNoticia = conexao.tb_noticia.Where(q => q.CO_TIPO_NOTICIA == intCodTipoNoticia).ToList();
                return ListObjNoticia;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(conexao);
            }
            
            
        }

        public List<tb_noticia> CarregarNoticiasValidas(int intCodTipoNoticia)
        {
            try
            {
                InicializarConexao(conexao);
                var ListObjNoticia = conexao.tb_noticia.Where(q => q.CO_TIPO_NOTICIA == intCodTipoNoticia && q.CO_SITUACAO == 1).OrderByDescending(q => q.DT_PUBLICACAO).OrderByDescending(q => q.CO_NOTICIA).ToList();
                return ListObjNoticia;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(conexao);
            }
            
        }

        public List<tb_comentario> CarregarComentarios(int intCodBlog)
        {
            try
            {
                InicializarConexao(conexao);
                var ListObjComen = conexao.tb_comentario.Where(q => q.CO_NOTICIA == intCodBlog).OrderByDescending(q => q.DT_CADASTRO).ToList();
                return ListObjComen;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(conexao);
            }
            
        }

        public tb_noticia SelecionarNoticia(int intCodNoticia) {
            
            try
            {
                InicializarConexao(conexao);
                var objNoticia = conexao.tb_noticia.Where(q => q.CO_NOTICIA == intCodNoticia).ToList().FirstOrDefault();
                return objNoticia;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(conexao);
            }
        }

        public void ExcluirNoticia(int intCodNoticia) {

            try
            {
                InicializarConexao(conexao);
                ExcluirComentarios(intCodNoticia);

                var objNoticia = conexao.tb_noticia.Where(q => q.CO_NOTICIA == intCodNoticia).ToList().FirstOrDefault();

                conexao.DeleteObject(objNoticia);
                conexao.SaveChanges();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(conexao);
            }

            

        }

        private void ExcluirComentarios(int intCodNoticia)
        {
            try
            {
                InicializarConexao(conexao);
                var ListObjComentario = conexao.tb_comentario.Where(q => q.CO_NOTICIA == intCodNoticia).ToList();

                foreach (var item in ListObjComentario)
                {
                    conexao.DeleteObject(item);
                    conexao.SaveChanges();
                }
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(conexao);
            }

            

        }

        public void EditarNoticia(tb_noticia objNoticia) {
            try
            {
                InicializarConexao(conexao);
                var objNoticiaBanco = conexao.tb_noticia.Where(q => q.CO_NOTICIA == objNoticia.CO_NOTICIA).ToList().FirstOrDefault();

                objNoticiaBanco.DS_TITULO = objNoticia.DS_TITULO;
                objNoticiaBanco.DS_SUBTITULO = objNoticia.DS_TITULO;
                objNoticiaBanco.DS_NOTICIA = objNoticia.DS_TITULO;
                objNoticiaBanco.DT_PUBLICACAO = objNoticia.DT_PUBLICACAO;
                objNoticiaBanco.DT_EXPIRACAO = objNoticia.DT_EXPIRACAO;
                objNoticiaBanco.CO_SITUACAO = objNoticia.CO_SITUACAO;
                objNoticiaBanco.CO_DESTAQUE = objNoticia.CO_DESTAQUE;
                objNoticiaBanco.CO_ORDEM_DESTAQUE = objNoticia.CO_ORDEM_DESTAQUE;

                conexao.SaveChanges();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(conexao);
            }

        }

        public void MudarStatus(int intCodNoticia)
        {
            try
            {
                InicializarConexao(conexao);
                var objNoticia = conexao.tb_noticia.Where(q => q.CO_NOTICIA == intCodNoticia).ToList().FirstOrDefault();

                if (objNoticia.CO_SITUACAO == 0)
                {
                    objNoticia.CO_SITUACAO = 1;
                }
                else
                {
                    objNoticia.CO_SITUACAO = 0;
                }

                conexao.SaveChanges();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(conexao);
            }

        }
    }
}